﻿using Microsoft.Extensions.DependencyInjection;
using PLCS.Domain.Stations;

namespace PLCS.EquipmentService.Methods;
/*
这边有几个点：
1：不能再注入别的服务了，因为是反射过来只传IServiceProvider，这边如果注入了别的会报错。
但是一个IServiceProvider也够了，因为这个是主容器嘛，其他服务可以从这个容器里取，具体方法就是serviceProvider.GetService<服务名>()。
2：就是方法里面不能用Async  Await,写了会报错，这个问题我也不知道为啥。大家可以试着解决一下。不过反正同步状态下也可以用异步方法。
 */

public class StationFullChangedMethod
{
    private readonly IServiceProvider _serviceProvider;

    public StationFullChangedMethod(IServiceProvider serviceProvider)
    {
        this._serviceProvider = serviceProvider;
    }

    public void ST004AutoForward()
    {
        AutoForward("ST003", "ST004");
    }

    public void ST107AutoForward()
    {
        AutoForward("ST106", "ST107");
    }

    public void ST108AutoForward()
    {
        AutoForward("ST107", "ST108");
    }

    public void ST109AutoForward()
    {
        AutoForward("ST108", "ST109");
    }

    public void ST110AutoForward()
    {
        AutoForward("ST109", "ST110");
    }

    public void ST111AutoForward()
    {
        AutoForward("ST110", "ST111");
    }

    public void ST112AutoForward()
    {
        AutoForward("ST111", "ST112");
    }

    /// <summary>
    /// 这边主要对于向输送线或者部分移栽车
    /// 这些设备只单向向前输送，所以这里判断当前工位满位时，工单号是否为空
    /// 空即把前一个工单和托盘ID绑定到当前工位上，相当于就是向前扭转了
    /// </summary>
    /// <param name="lastStation"></param>
    /// <param name="thisStation"></param>
    private void AutoForward(string lastStation, string thisStation)
    {
        var service = _serviceProvider.GetService<IStationRepository>();
        var last = service.GetStationByNumAsync(lastStation).Result;
        var now = service.GetStationByNumAsync(thisStation).Result;
        //if (string.IsNullOrWhiteSpace(now.CurrentOrderNo))
        //{
        //string orderNo = last.CurrentOrderNo;
        //string trayNo = last.TrayNo;
        //now.TrayNo = trayNo;
        //now.CurrentOrderNo = orderNo;
        //last.CurrentOrderNo = string.Empty;
        //last.TrayNo = string.Empty;
        //service.UpdateManyAsync(new List<Station>() { last, now }).Wait();
        //}
    }
}